package com.ld.dao;

import com.ld.entity.Actor;
import com.ld.entity.Film;
import com.ld.entity.Rental;
import com.ld.entity.Store;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface StoreDao {

    /*
     * @param filmId 传入电影id,
     * @return 返回所有拥有此影片的店铺id集合
     */
     List<Integer> getFilmOwnerStoreId(@Param("filmId") Integer filmId);

    /**
     * @param storeIds 店铺id集合
     * @return 查询店铺的详细地址
     */
     List<Store> getStoreInfo( List<Integer> storeIds);

    /**
     * @param filmId 电影id
     * @param storeId 店铺id
     * @return 这部电影在这家店 本来 有多少库存
     */
     Integer getFilmCount(@Param("filmId") Integer filmId,@Param("storeId")Integer storeId);

    /**
     * @param filmId 电影id
     * @param storeId 店铺id
     * @return  这部电影在这家店 借出未还有多少
     */
     Integer getUnreturnedCount(@Param("filmId") Integer filmId,@Param("storeId")Integer storeId);


    /**
     * @param storeId 店铺id
     * @param currentPage 当前页
     * @param pageSize 每页大小
     * @return 这家店所有尚未归还的信息
     */
     List<Rental> getAllUnreturnedInfo(@Param("storeId")Integer storeId,
                                             @Param("currentPage") Integer currentPage,
                                             @Param("pageSize")Integer pageSize);

    /**
     * @param storeId 店铺id
     * @return 获取某家店所有借出还未归还的信息 的总条数 (配合getAllUnreturnedInfo做分页)
     */
     Integer getAllUnreturnedCount(@Param("storeId") Integer storeId);

    /**
     * 结算 和下面搭配
     * @param rental 更新rental表的return_date,return_staff_id 通过rentalId
     * @return 1成功,0失败
     */
     Integer clearingUpdateRental(Rental rental);

    /**
     * 结算 和上面搭配
     * @param rental 增加payment表的:
     *     customer_id,staff_id(归还员工),rental_id,amount,
     *     payment_date(付款时间就是归还时间returnDate)
     * @return 1成功,0失败
     */
     Integer clearingInsertPayment(Rental rental);

    /**
     * 和上面2个搭配 查看结算日期是否为空,防止重复更新
     * @param rentalId 出租id
     * @return 返回returnDate
     */
     String returnDateIsNull(Integer rentalId);

    /**
     * 根据演员名模糊查询
     * @param searchContent 搜索内容
     * @return 返回演员list
     */
     List<Actor> searchByActorName(@Param("searchContent") String searchContent);

    /**
     * 根据演员id查询这个演员所参与的电影,只能查询自己店铺的电影
     * @param actorId 演员id
     * @param storeId 店铺id
     * @return film中的film_id,title,rating,category,inventory_id,isRental
     */
     List<Film> getWhichFilmTheActorWereInvolvedIn(@Param("actorId") Integer actorId,@Param("storeId") Integer storeId);


    /**
     * 确认库存是否未借出
     * @param inventoryId 库存编号
     * @param storeId 店铺id
     * @return 有3种结果 返回null则表示这家店没有这个影片.有的话只会返回'未借出'和'已借出'
     */
    String inventoryIsExit(@Param("inventoryId") Integer inventoryId,@Param("storeId") Integer storeId);

    /**
     * 借出
     * @param rental 包括customerId,rentalDate,inventoryId,staffId,storeId
     * @return 成功与否信息
     */
    Integer getCustomerRental(Rental rental);
}
